
trait StringCast<T> {
    fn cast(&self) -> Option<T>;
}

enum Switch {
    On,
    Off,
    None
}

enum SizeValue {
    Int(isize),
    Float(f64),
    None,
} 

enum SizeUnit {
    KiloBytes,
    MegaBytes,
    GigaBytes,
}

struct SizeWithUnit {
    value: SizeValue,
    unit: SizeUnit
}

enum Size {
    WithoutUnit(SizeValue),
    WithUnit(SizeWithUnit)
} 

enum DurationUnit {
    Day,
    Hour,
    Minute,
    Seconds,
    Milliseconds,
    Microseconds
}

struct DurationWithUnit {
    value: i32,
    unit: DurationUnit
}

enum Duration {
    WithoutUnit(i32),
    WithUnit(DurationWithUnit)
}

struct EnvVar {
    name: std:String
}